#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <iostream>

using namespace std ;

int main ( )
{
	int server_sockfd, client_sockfd ;
	int server_len,    client_len ;
	struct sockaddr_un server_address ;
	struct sockaddr_un client_address ;

	unlink ( "/tmp/whq/server_socket" ) ;
	server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0) ;

	server_address.sun_family = AF_UNIX ;
	strcpy(server_address.sun_path, "/tmp/whq/server_socket") ;
	server_len = sizeof(server_address) ;
	bind ( server_sockfd, (struct sockaddr *)&server_address, server_len ) ;

	listen( server_sockfd, 5 ) ;

	while ( 1 )
	{
		char command[255] ;
		char ch = 'a' ;
		cout<< "Server Waiting" << endl ;
		
		client_len = sizeof(client_address) ;
		client_sockfd = accept( server_sockfd, (struct sockaddr *)&client_address, (socklen_t *)&client_len ) ; 

		read ( client_sockfd, command, sizeof(command) ) ;
		cout<< command << endl ;
		ch++ ;
		write( client_sockfd, &ch, 1 ) ;
		close(client_sockfd) ;
	}

	return 0 ;
}
